docker 的第二篇, 來介紹 dockerfile, 就是自己做 image, 然後 run 成 container, 所以 docker 是一種很流行的部屬方式.
專案架構
- main.go
- dockerfile
- ui
- dist
- src
- package.json
先執行一下 go mod init web
接著加入以下檔案
main.go
package main
import (
"fmt"
"log"
"github.com/gofiber/fiber/v2"
)
const (
port = ":3001"
staticDir = "./ui/dist" // 因為目標靜態資料夾在 ui/dist 裡面, 這邊就只要注意這個路徑正確
)
func main() {
app := fiber.New()
app.Static("/", staticDir)
fmt.Printf("Server is listening on port %s\n", port)
err := app.Listen(port)
if err != nil {
log.Fatalf("Error starting server: %v\n", err)
}
}
dockerfile
# 使用的 image, alpine是最小的linux系統, 這樣 image 就會很小省資源
FROM golang:1.21.1-alpine3.17
# 指定工作資料夾在 /app, 不然在/ 裡面會有很多其他檔案不太好管理
WORKDIR /app
# 把當前所有檔案複製到 /app 裡面
COPY . .
# 在 /app 裡面直接執行
CMD ["go","run","."]
web ui
npm create vite
( 名字ui, react, javascript )yarn
( 安裝需要的依賴套件 )yarn run dev
( 先看一下畫面成功ok )yarn run build
( build成功會有一個 dist 資料夾 )材料準備好了, 來開始製作 image
docker build -t goweb .
來跑成 container
docker run -it -p 3001:3001 --name goweb goweb
最後就可以檢查結果啦, 瀏覽 localhost:3001, 應該會看到網頁畫面
上面的範例, 其實很多值得吐槽的地方, 太肥, 不必要的檔案, 很多東西需要優化, 但覺得現階段先這樣,能動, 優化的東西再加就好, multi-stage build 也之後再來介紹好了, 後面我們繼續介紹 docker-compose